/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Connection.ConnectionFactory;
import Interfaces.Inter_Administrador;
import java.sql.Connection;
import Model.Administrador;
import Model.Usuario;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


/**
 *
 * @Ially H.R. de Andrade
 */
public class DAO_Administrador implements Inter_Administrador {
    Connection con;
   
     
     public DAO_Administrador() throws Exception{
        try{
            this.con =ConnectionFactory.getConnection();
        }
        catch(Exception e){
            throw new Exception("Erro ao conectar no Administrador\n"+e.getMessage());
        }
    }

    @Override
    public void GravaAdministrador(Administrador administrador) throws Exception {
        PreparedStatement ps =null;

        if(administrador ==null)
            throw new Exception("Nao pode gravar um administrador nulo");

        try{
            String sql ="INSERT INTO ADMINISTRADOR (Id_Administrador, CodVal_idCodVal, Nome, Sobrenome, Telefone, Email, Login, Senha, Sexo, Celular , Instituicao) "
                    + "values(?,?,?,?,?,?,?,?,?,?,?)";
            ps =con.prepareStatement(sql);
            ps.setInt(1,administrador.getId_Administrador());
            ps.setInt(2, administrador.getCodVal_idCodVal());
            ps.setString(3,administrador.getNome());
            ps.setString(4,administrador.getSobrenome());
            ps.setString(5,administrador.getTelefone());
            ps.setString(6,administrador.getEmail());
            ps.setString(7,administrador.getLogin());
            ps.setString(8,administrador.getSenha());
            ps.setString(9,administrador.getSexo());
            ps.setInt(10,administrador.getCelular());
            ps.setString(11,administrador.getInstituicao());
            
            ps.executeUpdate();
        }
         catch(SQLException e)
        {
            throw new Exception("Erro ao inserir ADMINISTRADOR \n"+e.getMessage());
        }
    }

    @Override
    public void ExcluiAdministrador(Administrador administrador) throws Exception {
       PreparedStatement ps =null;

        if(administrador ==null)
        throw new Exception("Não pode excluir uma ADMINISTRADOR nulo");

        try
        {
            ps =con.prepareStatement("delete from ADMINISTRADOR where Id_Administrador =?");
            ps.setInt(1,administrador.getId_Administrador());
            ps.executeUpdate();
        }
        catch(SQLException e)
        {
            throw new Exception("Erro ao excluir ADMINISTRADOR \n"+e.getMessage());
        }
    }

    @Override
    public void AlteraAdministrador(Administrador administrador) throws Exception {
        PreparedStatement ps =null;

        if(administrador ==null)
            throw new Exception("Não pode alterar administrador nulo");
        try
        {
            String sql ="update ADMINISTRADOR set Nome= ?";

            ps =con.prepareStatement(sql);
            ps.setString(1, administrador.getNome());
            ps.executeUpdate();
        }
        catch(SQLException e)
        {
            throw new Exception("Erro ao alterar dados de ADMINISTRADOR\n"+e.getMessage());
        }
    }

    @Override
    public Administrador LocalizaAdministrador(int Id_Administrador) throws Exception {
        PreparedStatement ps =null;
        ResultSet rs = null;
        

        if(Id_Administrador == 0)
            throw new Exception("Não pode Localizar Administrador de ID igual a 0");

        try
        {
            ps =con.prepareStatement("select * from ADMINISTRADOR where Id_Administrador = ?");
            ps.setInt(1, Id_Administrador);
            rs =ps.executeQuery();

            if(!rs.next())
                throw new Exception("Não foi encontrado nenhum ADMINISTRSDOR com o ID "+Id_Administrador);

            int CodVal_idCodVal = rs.getInt(2);
            String Nome = rs.getString(3);
            String Sobrenome = rs.getString(4);
            String Telefone = rs.getString(5);
            String Email = rs.getString(6);
            String Login = rs.getString(7);
            String Senha = rs.getString(8);
            String Sexo = rs.getString(9);
            int Celular = rs.getInt(10);
            String Instituicao = rs.getString(11);

            
             Administrador administrador = new Administrador(Id_Administrador,CodVal_idCodVal,Nome,Sobrenome,Telefone,Email,Login,Senha,Sexo,Celular,Instituicao);
             return administrador;
        }catch(SQLException e)
        {
            throw new Exception("Erro ao localizar administrador \n"+e.getMessage());
        }
    }

    @Override
    public List ListaAdministrador() throws Exception {
        PreparedStatement ps =null;
        ResultSet rs =null;
        try
        {
            ps =con.prepareStatement("select * from administrador order by CodVal_idCodVal asc");
            rs =ps.executeQuery();

            List<Administrador> list = new ArrayList<Administrador>();

            while(rs.next())
            {
                int Id_Administrador =rs.getInt(1);
                int CodVal_idCodVal =rs.getInt(2);
                String Nome =rs.getString(3);
                String Sobrenome =rs.getString(4);
                String Telefone =rs.getString(5);
                String Email =rs.getString(6);
                String Login = rs.getString(7);
                String Senha =rs.getString(8);
                String Sexo = rs.getString(9);
                int Celular =rs.getInt(10);
                String Instituicao = rs.getString(11);
                
                
                Administrador administrador = new Administrador(Id_Administrador,CodVal_idCodVal,Nome,Sobrenome,Telefone,Email,Login,Senha,Sexo,Celular,Instituicao);
                list.add(administrador);
            }
            return list;
        }
        catch(SQLException e)
        {
            throw new Exception("Erro ao listar Administrador \n"+e.getMessage());
        }
    }

    
   
    
}
